package fr.nts.framework.front.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

/**
 * Interceptor Spring MVC de base
 * 
 * @author sco
 * @version 1.0.0
 */
public abstract class AbstractInterceptor extends HandlerInterceptorAdapter{
	
	/**
	 * Le traitement que dois faire l'intercepteur parent avant l'action.
	 * 
	 * @param request La requète HTTP
	 */
	abstract void intercept(HttpServletRequest request,
	                        HttpServletResponse response);
	
	/**
	 * Le traitement que dois faire l'intercepteur parent après l'action.
	 * 
	 * @param request La requète HTTP
	 */
	abstract void finish(HttpServletRequest request);
	
	/*
	 * (non-Javadoc)
	 * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
	 */
	public boolean preHandle(HttpServletRequest request, 
			                 HttpServletResponse response, 
			                 Object handler) throws Exception{
		
		// Methode à implémenter par la classe parente
		intercept(request,
				  response);
		
		return true;
	}
	
	
	/*
	 * (non-Javadoc)
	 * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#postHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.web.servlet.ModelAndView)
	 */
	public void postHandle(HttpServletRequest request, 
			               HttpServletResponse response, 
			               Object handler, 
			               ModelAndView modelAndView) throws Exception{
		
		// Methode à implémenter par la classe parente
		finish(request);
	}
}